/**
* <p>Title: IExcelParser.java</p>
* <p>Description: excel接口类</p>
* <p>Company: www.huoyunren.com</p>
* @author duanxiangyun
* @date 2015年6月1日
* @version 1.0
*/
package com.duan.test.utils.Excel;
import java.util.List;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;

/**
 * excel接口类
 */
public interface IExcelParser {
	/***
	 * 获取工作薄对象
	 * @param fileName excel文件全路径
	 * @return Workbook 工作薄对象
	 * @throws Exception
	 */
	public Workbook getWorkBook(String fileName) throws Exception;
	
	/***
	 * 获取工作薄对象
	 * @return Workbook 工作薄对象
	 * @throws Exception
	 */
	public Workbook getWorkBook() throws Exception;
	
	/***
	 * 获取sheet
	 * @param wb 需要获取Sheet的工作薄
	 * @param sheetName sheet名字
	 * @return Sheet
	 */
	public Sheet getSheet(Workbook wb, String sheetName);
	
	/***
	 * 获取sheet对象
	 * @param wb 需要获取Sheet的工作薄
	 * @param sheetIndex sheet的索引，从0开始
	 * @return Sheet
	 */
	public Sheet getSheet(Workbook wb, int sheetIndex);
	
	/***
	 * 获取Row对象
	 * @param fileName excel文件全路径
	 * @param sheetName sheet名
	 * @param rowNum 行号，从0开始
	 * @return Row 行对象
	 * @throws Exception
	 */
	public Row getRow(String fileName, String sheetName, int rowNum) throws Exception;
	
	/***
	 * 获取Row对象
	 * @param sheet Row所在sheet
	 * @param rowNum 行号，从0开始
	 * @return Row 行对象
	 * @throws Exception
	 */
	public Row getRow(Sheet sheet, int rowNum) throws Exception;
	
	/***
	 * 
	 * @param sheetName 					sheet name
	 * @param rowIndex 						需要获取数据的行号
	 * @param ignoreBlankCell 				是否忽略空单元格,true表示忽略，false表示不忽略，当为false时，空单元格返回为空字符串
	 * @return 	String[] 获取sheet中指定行的数据，并把获取数据转换成String格式
	 * @throws Exception
	 */
	public String[] getRowValues(String sheetName, int rowIndex, boolean ignoreBlankCell) throws Exception;
	
	/***
	 * 获取指定行的数据
	 * @param row 							行对象
	 * @param ignoreBlankCell				是否忽略空行，意义同上
	 * @return								获取sheet中指定行的数据，并把获取数据转换成String格式
	 * @throws Exception
	 */
	public String[] getRowValues(Row row, boolean ignoreBlankCell) throws Exception;
	
	/***
	 * 
	 * @param row							行对象
	 * @param startCellPos					起始单元格位置
	 * @param ignoreBlankCell				是否忽略空单元格
	 * @return								返回从起始单元格开始到有数据的最后一个单元格之间的数据
	 * @throws Exception
	 */
	public String[] getRowValues(Row row, int startCellPos, boolean ignoreBlankCell) throws Exception;
	
	/***
	 * 					
	 * @param cell							单元格对象
	 * @return								返回单元格数据的String格式，如果为空返回为空字符串
	 */
	public String getCellValue(Cell cell);
	
	/***
	 * 
	 * @param sheetName						sheet name
	 * @param rowNumber						行号
	 * @param cellNumber					单元格号
	 * @return								返回指定单元格的值
	 */
	public String getCellValue(String sheetName, int rowNumber, int cellNumber);
	
	/***
	 * 
	 * @param sheetName						sheet name
	 * @return								获取sheet内有数据的行数
	 */
	public int getValidRowsCount(String sheetName);
	
	
	/***
	 * 
	 * @param sheetName						sheet name
	 * @param ignoreBlankCell				是否忽略空单元格
	 * @return								返回Sheet中每一行数据
	 * @throws Exception
	 */
	public List<String[]> getSheetDatas(String sheetName, boolean ignoreBlankCell) throws Exception;

	/**
	 * 获得指定列名所在列的位置
	 * @param sheetName
	 * @param colname
	 * @return 列名所在位置
	 */
	public int getColNameIndex(String sheetName, String colname);

	/**
	 * 根据坐标获得元素值
	 * @param sheet
	 * @param rowNumber 所在行
	 * @param cellNumber 所在列
	 * @return 元素值
	 */
	public String getCellValue(Sheet sheet, int rowNumber, int cellNumber);
	

	/**
	 * 写入非图片格式信息 :这是一个实体类，提供了相应的接口，用于操作Excel，在任意坐标处写入数据。
	 * @param sheetName 表名
	 * @param newContent 你要输入的内容 
	 * @param beginRow 行坐标，Excel从 0 算起
	 * @param beginCell 列坐标，Excel从 0 算起
	 */
	public void writeInTemplate(String sheetName, String newContent, int beginRow, int beginCell);

	/**
	 * 删除空行
	 * @param sheet 表
	 * @return Sheet 处理后的表
	 */
	public Sheet deleteEptRows(Sheet sheet);
}
